#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define D long double
#define N 4003
#define mod 999999999//1e9-1
int tto[N*10],to[N][N],tu[N*10],td[N*10],tl[N*10],tr[N*10],len;
ll ksum1[N*10],a[N][N];int n,q;
ll ksum[N][N];int ttl[N],ttr[N];
ll kask1(int x,int l,int r){
	if(tto[l]==tto[r]){
		ll sum=0;
		for(int i=l;i<=r;i++)	sum+=a[x][i];
		return sum;
	}
	ll sum=kask1(x,l,ttr[tto[l]])+kask1(x,ttl[tto[r]],r);
	for(int i=tto[l]+1;i<tto[r];i++)	sum+=ksum[x][i];
	return sum;
}
ll kask2(int x,int l,int r){
	ll sum=0;
	if(tto[l]==tto[r]){
		for(int i=ttl[x];i<=ttr[x];i++){
			for(int j=l;j<=r;j++){
				sum+=a[i][j];
			}
		}
		return sum;
	}
	sum+=kask2(x,l,ttr[tto[l]])+kask2(x,ttl[tto[r]],r);
	for(int i=tto[l]+1;i<tto[r];i++){
		sum+=ksum1[to[ttl[x]][ttl[i]]];
	}
	return sum;
}
ll kask(int x1,int y1,int x2,int y2){
	ll sum=0;
	if(tto[x1]==tto[x2]){
		for(int i=x1;i<=x2;i++){
			sum+=kask1(i,y1,y2);
		}
		return sum;
	}
	sum=kask(x1,y1,td[to[x1][y1]],y2)+kask(tu[to[x2][y2]],y1,x2,y2);
	for(int i=tto[x1]+1;i<tto[x2];i++){
		sum+=kask2(i,y1,y2);
	}
	return sum;
}
inline void cgp(int x,int y,int op,int w){
	ll val=114514;
	if(op==1){
		val=a[x][y]&w;
	}else if(op==2){
		val=a[x][y]|w;
	}else if(op==3){
		val=a[x][y]^w;
	}else{
		val=a[x][y]+w;val%=mod;
	}
	int v=a[x][y];a[x][y]=val;
	ksum1[to[x][y]]+=val-v;ksum[x][tto[y]]+=val-v;
}
signed main(){
	freopen("fire.in","r",stdin);
	freopen("fire.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>q;len=sqrt(n);
	for(int i=1;i<=n*10;i++)	tto[i]=(i-1)/len+1;
	for(int i=0;i<=n*10;i++)	tu[i]=1e9,td[i]=-1e9,tl[i]=1e9,tr[i]=-1e9;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			to[i][j]=(tto[i]-1)*tto[n]+tto[j];
			tu[to[i][j]]=min(tu[to[i][j]],i);td[to[i][j]]=max(td[to[i][j]],i);
			tl[to[i][j]]=min(tl[to[i][j]],j);tr[to[i][j]]=max(tr[to[i][j]],j);
		}
	}
	for(int i=1;i<=tto[n];i++){
		ttl[i]=ttr[i-1]+1;ttr[i]=min(n,ttl[i]+len-1);
	}
	while(q--){
		int op;cin>>op;
		if(op==1){
			int t,x,val;cin>>t>>x>>op>>val;
			if(t==0){
				for(int i=1;i<=n;i++)	cgp(x,i,op,val);
			}else{
				for(int i=1;i<=n;i++)	cgp(i,x,op,val);
			}
		}else{
			int x,y;cin>>x>>y;cout<<kask(1,1,x,y)<<"\n";
		}
	}
	return 0;
}
/*
sqrt*sqrt

300 1
2 225 263
255112467726
246305098097
*/
